home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / server / obwin.c < prev    next >
C/C++ Source or Header  |  1996-07-24  |  4KB  |  137 lines

  1. /*
  2.  * static char *rcsid_obwin_c =
  3.  *   "$Id: obwin.c,v 1.3 1994/05/06 08:17:10 master Exp $";
  4.  */
  5.  
  6. /*
  7.     CrossFire, A Multiplayer game for X-windows
  8.  
  9.     Copyright (C) 1992 Frank Tore Johansen
  10.  
  11.     This program is free software; you can redistribute it and/or modify
  12.     it under the terms of the GNU General Public License as published by
  13.     the Free Software Foundation; either version 2 of the License, or
  14.     (at your option) any later version.
  15.  
  16.     This program is distributed in the hope that it will be useful,
  17.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.     GNU General Public License for more details.
  20.  
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24.  
  25.     The author can be reached via e-mail to frankj@ifi.uio.no.
  26. */
  27.  
  28. #include <global.h>
  29. #ifndef __CEXTRACT__
  30. #include <sproto.h>
  31. #endif
  32.  
  33. /*
  34.  * This file contains the routines needed for having a generic
  35.  * object-window which can display the items in a location of a
  36.  * map, or the items inside an object.
  37.  */
  38.  
  39. obwin *get_empty_obwin() {
  40. #ifdef OBWIN
  41.   obwin *o = (obwin *) malloc(sizeof(obwin));
  42.  
  43.   if(o==NULL)
  44.     fatal(OUT_OF_MEMORY);
  45.  
  46.   o->inventory=0;
  47.   o->x=0; o->y=0;
  48.   o->map=NULL;
  49.   o->ob=0;
  50.   strcpy(o->format,"%-24.24ss%-6s");
  51.   o->chars=30;
  52.   o->scroll=0;
  53.   o->last_scroll=0;
  54.   o->nrofdrawn=0;
  55.   o->barlength=0;
  56.   o->size=0;
  57.   o->scrollsize=0;
  58.   o->scrollstart=0;
  59.   o->faces=NULL;
  60.   o->names=NULL;
  61.   return o;
  62. #else
  63.   return NULL;
  64. #endif
  65. }
  66.  
  67. void resize_obwin(obwin *o,int width,int height) {
  68. #ifdef OBWIN
  69.   int i,chars=(width-60)/FONTWIDTH,lines=(y-FONTHEIGHT-8)/24;
  70.   Fontindex *new_faces;
  71.   char **new_names;
  72.   if(o->faces!=NULL)
  73.     free(o->faces);
  74.   if(o->names!=NULL) {
  75.     for(i=0;i<o->lines;i++)
  76.       free(o->names[i]);
  77.     free(o->names);
  78.   }
  79.   if(chars<10)
  80.     chars=10;
  81.   if(lines<2)
  82.     lines=2;
  83.   o->chars=chars;
  84.   o->lines=lines;
  85.   o->faces = (Fontindex *) malloc(sizeof(Fontindex) * lines);
  86.   o->names = (char **) malloc(sizeof(char *) * lines);
  87.   for(i=0;i<lines;i++)
  88.     o->names[i] = (char *) malloc(sizeof(char) * (chars + 1));
  89.   o->barlength=lines*24;
  90. #endif
  91. }
  92.  
  93. obwin *
  94. create_obwin(player *p,int x,int y,int width,int height,int standalone,
  95.              char *name)
  96. {
  97. #ifdef OBWIN
  98.   int i;
  99.   object *o=get_empty_obwin();
  100.   char buf1[32],buf2[32];
  101.  
  102.   sprintf(o->format,"%%-%d.%ds%%-6s",chars-6,chars-6);
  103.   resize_obwin(o,width,height);
  104.  
  105.   o->hint.x=x; o->hint.y=y;
  106.   o->hint.width=width; o->hint.y=height;
  107.   o->hint.flags=PPosition | PSize;
  108.   o->window=XCreateSimpleWindow(
  109.     standalone?DefaultRootWindow(p->gdisp):p->win_root,
  110.     o->hint.x,o->hint.y,o->hint.width,o->hint.height,2,
  111.     p->gforeground,p->gbackground);
  112.   p->pixmap=XCreateBitmapFromData(p->gdisp,o->window,crossfire_bits,
  113.                                   crossfire_width,crossfire_height);
  114.   sprintf(buf1,"Crossfire - %s",name);
  115.   sprintf(buf2,"cross%s",name);
  116.   XSetStandardProperties(p->gdisp,o->window,buf1,buf2,p->pixmap,gargv,gargc,
  117.                          &(o->hint));
  118.   XSelectInput(p->gdisp,o->window,
  119.                ButtonPressMask|KeyPressMask|KeyReleaseMask|ExposureMask|
  120.                StructureNotifyMask);
  121.   XMapRaised(p->gdisp,o->window);
  122.   o->gc_text=XCreateGC(p->gdisp,o->window,0,0);
  123.   o->gc_icon=XCreateGC(p->gdisp,o->window,0,0);
  124.   XSetForeground(p->gdisp,o->gc_text,p->gforeground);
  125.   XSetForeground(p->gdisp,o->gc_icon,p->gforeground);
  126.   XSetBackground(p->gdisp,o->gc_text,p->gbackground);
  127.   XSetBackground(p->gdisp,o->gc_icon,p->gbackground);
  128.   p->font=XLoadFont(p->gdisp,font_inv_text); /* Will fix this in future */
  129.   XSetFont(p->gdisp,o->gc_text,p->font);
  130.   p->font=XLoadFont(p->gdisp,font_graphic);
  131.   XSetFont(p->gdisp,o->gc_icon,p->font);
  132.   return o;
  133. #else
  134.   return NULL;
  135. #endif
  136. }
  137.